package de.hdu.pms.ho.ctrl;


import java.util.Date;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import de.hdu.pms.ho.dao.KundeDao;
import de.hdu.pms.ho.dao.ZimmerDao;
import de.hdu.pms.ho.dao.ZimmerKundeDao;
import de.hdu.pms.ho.model.Kunde;
import de.hdu.pms.ho.model.Zimmer;
import de.hdu.pms.ho.model.ZimmerKunde;

/**
 * The {@link ZimmerKundeController} is for reserving rooms in the hotel.
 * It is linked with {@link Zimmer} and {@link Kunde}. 
 *  
 * @author Hendrik Neumann
 *
 */

@Controller
public class ZimmerKundeController {
	private static Logger log = Logger.getLogger(ZimmerKundeController.class);
	private ZimmerKundeDao zimmerKundeDao;
	private ZimmerDao zimmerDao;
	private KundeDao kundeDao;

	
	/*
	 * Getter and setter methods
	 */
	public ZimmerDao getZimmerDao() {
		return zimmerDao;
	}

	public void setZimmerDao(ZimmerDao zimmerDao) {
		this.zimmerDao = zimmerDao;
	}

	public KundeDao getKundeDao() {
		return kundeDao;
	}

	public void setKundeDao(KundeDao kundeDao) {
		this.kundeDao = kundeDao;
	}

	public ZimmerKundeDao getZimmerKundeDao() {
		return zimmerKundeDao;
	}

	public void setZimmerKundeDao(ZimmerKundeDao zimmerKundeDao) {
		this.zimmerKundeDao = zimmerKundeDao;
	}

	@RequestMapping(value = "/AlleReservierungen.html", method = RequestMethod.GET)
	public ModelAndView findAll() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Reservierungen");
		mv.addObject("message", "Übersicht über alle Reservierungen");
		mv.addObject("message2", "Bitte notieren Sie sich Ihre Reservierungsnummer für den CheckIn.");
		mv.addObject("zimmerkunden", zimmerKundeDao.findAll());
		mv.addObject("edit", true);
		mv.setViewName("protected/list-reservierungen");
		return mv;
	}

	/*@RequestMapping(value = "/FreieZimmer.html", method = RequestMethod.GET)
	public ModelAndView findfreieZimmer() {
		ModelAndView mv = new ModelAndView();
		mv.addObject("title", "Verfügbare Zimmer");
		mv.addObject("message", "Folgende Zimmer sind derzeit verfügbar");
		mv.addObject("zimmerkunden", zimmerKundeDao.findFreie());
		mv.addObject("edit", true);
		mv.setViewName("open/list-freiezimmer");
		return mv;
	}*/
	
	@RequestMapping(value = "/Reservieren.html", method = RequestMethod.POST)
	public String save(Integer id, Integer zimmer, Integer kunde, boolean reserviert, boolean belegt, boolean ausgecheckt, String anfang, String ende, Date erstellt) {
		log.debug("Reservieren.html");
		// HibernateTemplate template = getHibernateTemplate();
		/*
		 * zimmerkundeDao.reservieren(zimmer, kunde, reserviert, belegt,
		 * ausgecheckt);
		 */
		// ZimmerKunde zk = new ZimmerKunde(fk_zimmer, fk_kunde, reserviert,
		// belegt, ausgecheckt);
		// template.saveOrUpdate(zk);
//		Zimmer zimmer = zimmerDao.findById(zimmerId);
//		Kunde kunde = kundeDao.findById(kundeId);
//		
//		zimmerkunde.setZimmer(zimmer);
//		zimmerkunde.setKunde(kunde);
		Kunde ku = getKundeDao().findById(kunde);
		Zimmer zi = getZimmerDao().findById(zimmer);
		if (id == null) {			
			getZimmerKundeDao().reservieren(zi, ku, reserviert, belegt, ausgecheckt, anfang, ende, erstellt);
		} else {
			getZimmerKundeDao().modify(id, zi, ku, ausgecheckt, ausgecheckt, ausgecheckt, anfang, ende, erstellt);
		}
		
		return ("redirect:AlleReservierungen.html");
	}

	

	@RequestMapping(value="/EditReservierung.html", method = RequestMethod.GET)
	public ModelAndView edit(@RequestParam(required = false) Integer id) {
		log.debug("EditReservierung.html");
		ModelAndView mv = new ModelAndView();
		
		if (id == null) {
			mv.addObject("message", "Reservierung hinzufügen");
			mv.addObject("zimmer1", zimmerDao.findAll());
			mv.addObject("kunden", kundeDao.findAll());
			mv.addObject(new ZimmerKunde());			
		} else {
			mv.addObject("message", "Reservierung ändern");
			mv.addObject(getZimmerKundeDao().findById(id));
			mv.addObject("zimmer1", zimmerDao.findAll());
			mv.addObject("kunden", kundeDao.findAll());
		}
		
		mv.addObject("title", "Reservierung");
		mv.addObject("edit", true);
		mv.setViewName("protected/edit-zimmerkunde");
		
		return mv;
	}
	@RequestMapping(value="/LoescheReservierung.html", method=RequestMethod.GET)
	public ModelAndView delete(ZimmerKunde zimmerkunde, Integer id) {
		zimmerKundeDao.deletebyId(id);
		return new ModelAndView("redirect:AlleReservierungen.html");
	}
}
